/**
在 TypeScript 中，剩余参数（Rest Parameters）是一种用于定义函数可以接受不定数量参数的特性。它允许将多个参数收集到一个数组中，从而使函数能够处理多个参数而不需要显式地列出每个参数。这在处理可变参数的函数时非常有用。
  1. 剩余参数的定义
  剩余参数使用  `...`  语法来定义，后面跟着一个参数名。该参数名将收集传入的所有剩余参数，并将它们放入一个数组中。

   示例：
  function sum(...numbers: number[]): number {
      return numbers.reduce((acc, curr) => acc + curr, 0);
  }
  在这个例子中， `sum`  函数可以接受任意数量的数字参数，并将它们相加。

  2. 使用剩余参数

  调用带有剩余参数的函数时，可以传入任意数量的参数，包括零个参数。

   示例：
  console.log(sum(1, 2, 3));       // 输出: 6
  console.log(sum(5, 10, 15, 20)); // 输出: 50
  console.log(sum());               // 输出: 0
  3. 剩余参数与其他参数的结合

  剩余参数可以与必需参数和可选参数结合使用，但必须放在参数列表的最后。

   示例：
  function concatenate(separator: string, ...strings: string[]): string {
      return strings.join(separator);
  }

  console.log(concatenate(", ", "apple", "banana", "cherry")); // 输出: apple, banana, cherry
  4. 注意事项

  - **类型定义**：剩余参数的类型可以是任何有效的类型，包括基本类型、对象类型等。
  - **必须放在最后**：剩余参数必须是参数列表中的最后一个参数，不能在其后再定义其他参数。
  - **与数组的关系**：剩余参数会被收集为一个数组，因此可以直接使用数组的方法来处理它。

  5. 结论

  剩余参数是 TypeScript 中一个非常强大的特性，它允许函数接受不定数量的参数，并将它们作为数组处理。合理使用剩余参数可以提高函数的灵活性和可读性，特别是在需要处理可变数量参数的场景中。在实际开发中，结合使用剩余参数、可选参数和默认参数，可以设计出更为灵活和易用的函数接口。
 */
function foo(...args: (number | string)[]) {
  console.log(args)
}

foo(123, 321)
foo("abc", 111, "cba")

export {}